package cn.jasonone.jame.cycle;

import cn.jasonone.jame.basic.GameContext;

/**
 * 生命周期接口
 * @param <S> 生命周期类型
 * @author Jason
 * @since 1.0.0
 */
public interface LifeCycle<S extends LifeCycle> {
    /**
     * 初始化,如果重写此方法,请调用父类init
     * @param gc 游戏上下文对象
     */
    void init(GameContext<S> gc);

    /**
     * 销毁,如果重写此方法,请调用父类init
     * @param gc 游戏上下文对象
     */
    default void destory(GameContext<S> gc){}

    /**
     * 获得游戏上下文对象,如果重写此方法,请调用父类init
     * @return 游戏上下文对象
     */
    GameContext<? extends LifeCycle> getGameContext();
}
